public class code01s {
//    力扣 150 搜索二维矩阵
public boolean searchMatrix(int[][] matrix, int target) {
    // 解法二：一次二分查找
    // 观察题目可以得到一个信息，每一行的元素都是递增的
    // 所以我们可以将整个矩阵进行一下压缩
    // 将每一行上的元素首位相接起来，这样就可以通过一次的二分查找得出结果

    // 获取矩阵的长和宽
    int x = matrix.length;
    int y = matrix[0].length;

    // 将二维数组首位拼接抽象成一个一维数组
    int low = 0;
    int high = x*y - 1;
    while(low <= high) {
        // 确定中间值
        int mid = (high - low) / 2 + low;

        // 通过这个算法计算抽象后的数组元素
        int point = matrix[mid / y][mid % y];

        if(point < target) {
            low = mid + 1;
        } else if(point > target) {
            high = mid - 1;
        } else {
            return true;
        }
    }
    return false;
}
}
